package com.minimalist.lindi.mapper;

import com.minimalist.common.entity.lindi.po.LindiContractTemplate;
import com.minimalist.common.entity.lindi.vo.contracttemplate.LindiContractTemplateQueryVO;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryWrapper;

import java.util.List;

/**
 * 林地指标平台_合同模板表 映射层。
 *
 * @author 11987
 * @since 2025-05-31
 */
public interface LindiContractTemplateMapper extends BaseMapper<LindiContractTemplate>{

    /**
     * 根据ID查询合同模板
     *
     * @param contractTemplateId 合同模板ID
     * @return 合同模板
     */
    default LindiContractTemplate selectContractTemplateByContractTemplateId(Long contractTemplateId){
        return selectOneByQuery(QueryChain.create().eq(LindiContractTemplate::getContractTemplateId, contractTemplateId));
    }

    /**
     * 分页查询合同模板列表
     *
     * @param queryVO 查询条件
     * @return 分页结果
     */
    default Page<LindiContractTemplate> selectPageContractTemplateList(LindiContractTemplateQueryVO queryVO){
        return paginate(queryVO.getPageNum(), queryVO.getPageSize(),
                QueryWrapper.create()
                        .like(LindiContractTemplate::getContractTemplateName, queryVO.getContractTemplateName())
                        .eq(LindiContractTemplate::getContractTemplateType, queryVO.getContractTemplateType())
                        .eq(LindiContractTemplate::getStatus, queryVO.getStatus())
                        .orderBy(LindiContractTemplate::getCreateTime, false));
    }

    /**
     * 查询所有启用的模板列表
     *
     * @return 启用的模板列表
     */
    default List<LindiContractTemplate> selectAllEnableContractTemplateList(){
        return selectListByQuery(QueryChain.create().eq(
                LindiContractTemplate::getStatus, 1));
    }

    /**
     * 根据模板类型查询启用的合同模板
     *
     * @param contractTemplateType 模板类型
     * @return 合同模板
     */
    default LindiContractTemplate selectContractTemplateByType(String contractTemplateType){
        return selectOneByQuery(QueryChain.create()
                .eq(LindiContractTemplate::getContractTemplateType, contractTemplateType)
                .eq(LindiContractTemplate::getStatus, 1));
    }
}
